<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /* 
            CPU必做工厂   

            进程  
            工厂的一个车间  

            一个软件运行一定会在cpu 里边开辟一个空间   这个空间就是进程  
            多进程  就是cpu 里边开辟多个空间

            线程  
            线程就是车间的工人  
            单线程  车间一个人 


              


            阻塞 :
                同步代码   后边的在前面没有执行完以前 等待   直到前面执行完毕 才会执行
            
            js 是单线程代码执行机制  逐行依次执行代码,会阻塞代码执行  


            单线程效率太低 

            可以多线程 ,多个任务同时进行 ,多个任务同时进行  需要调度  
            这个调度就是事件轮询  

            事件轮询是一个处理异步任务和事件的机制  


            调用栈: 
                用来执行代码的 先进后出 执行函数调用 当一个函数被调用 
                会添加到调用栈的顶部 函数执行完毕 从调用栈移出  
            
            队列:
                是一个数据结构 用来存放异步任务  先进先出 

                宏任务队列:整体的JavaScript代码\setTimeout\setInterval
                按照添加的顺序执行

                微任务队列:Promise的then 微任务会在宏任务结束后立即执行  
            
            轮询:
                轮流询问宏任务和微任务里边的队列是否执行完成  
            
            API:接口 

            webAPI:
                浏览器提供的一组接口:处理异步机制和事件
                setTimeout setInterval ajax dom操作
                
                可以计时,分配任务到指定的队列 



        
        
        
        */


        /* 
            事件轮询(客户端)

                开始执行代码就开始轮询 

                规则:
                    1. 从宏任务队列中取出一个宏任务 执行它
                    2. 执行完一个空任务,清空一次微任务队列(不管微任务队列有多少任务,全部执行完毕);

                        空任务:
                            为了确保微任务能够及时执行,每个宏任务之间加了一个空任务,这样能够保证程序
                            的响应性能  
                            1.执行一个宏任务 
                            2.完成宏任务后,检查微任务队列是否为空(先执行空任务)
                            3.如果微任务队列不为空,依次执行微任务队列中的任务,直到清空微任务队列 
                            4. 检查是否有新的宏任务加入,如果有执行下一个宏任务  
                            5. 重复此步骤直到所有的任务队列清空  
        
        
        
        
        */
    </script>
</body>
</html>